﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CursoUNICEUB.Status;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Net.Mail;
using System.Net;
using System.Text;
using FastLibrary.Criptografia;
using System.Configuration;
using FastDATA;


namespace CursoUNICEUB
{
    public partial class Matricula : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (Session["aluno"] != null)
                {
                    string url = "~/MatriculaNova.aspx";
                    if (this.ClientQueryString.Count() > 0)
                    {
                        url += "?Curso=";
                        url += Request.QueryString["Curso"];
                    }
                    Response.Redirect(url);
                }


                if (carregaCursos() == false)
                {
                   Util.showMessage(this, "Não existe curso em aberto", "Default.aspx");
                }
                
                imgCaptcha.ImageUrl = "Captcha.aspx";
            }
        }

        protected void btnMatricular_Click(object sender, EventArgs e)
        {
            try
            {
                if (!this.chkAceite.Checked)
                {
                    Util.showMessage(this,"Por favor, leia o contrato e aceite o mesmo para confirmar a matrícula.");
                    return;
                }

                try
                {
                    string nascimento = this.txtNascimento.Text;
                    int dia = int.Parse(nascimento.Substring(0, 2));
                    int mes = int.Parse(nascimento.Substring(3, 2));
                    int ano = int.Parse(nascimento.Substring(6, 4));

                    DateTime nova = new DateTime(ano, mes, dia);
                }
                catch (Exception)
                {
                    Util.showMessage(this,"Por favor, verifique a data de nascimento.");
                    return;
                }

                if (!CheckCaptcha())
                {
                    lblMessage.Text = "Código inválido, por favor, tente novamente";
                    return;
                }

                insereAluno();

                enviarEmail();

                Util.showMessage(this, "Você foi matriculado com sucesso. Em breve entraremos em contato para finalizar sua matrícula.","Default.aspx");
            }
            catch (Exception)
            {
                Util.showMessage(this,"Houve um erro no momento da sua matrícula. Favor verificar os seus dados");
            }

        }

        private void enviarEmail()
        {
            try
            {
                string email = "guto86@gmail.com";
                string body = BuildMessage(email);
                EmailSender.enviar("Matrícula", body, email,false);

                //Envia confirmação para o email usuário matriculado
                email = this.txtEmail.Text;
                body = BuildMessageAluno(email);
                EmailSender.enviar("Confirmação de Matricula no Curso de C#.net", body, email,true);
            }
            catch (Exception)
            {
            }
        }

        private string BuildMessage(String email)
        {
            try
            {
                StringBuilder message = new StringBuilder();
                message.Append("Nome : ");
                message.AppendLine(this.txtNome.Text);

                message.Append("Email do cliente : ");
                message.AppendLine(this.txtEmail.Text);

                message.Append("Telefone : ");
                message.AppendLine(this.txtTelefone.Text);

                message.Append("Celular: ");
                message.AppendLine(this.txtCelular.Text);

                message.Append("Curso selecionado : ");
                message.AppendLine(ddlCurso.SelectedItem.Text);

                if (this.rbnTransDep.Checked)
                {
                    message.AppendLine("Forma de Pagamento : Transferencia ou depósito <br /> Banco: Itaú <br /> Ag:4298 <br /> Cc:10122-3");
                }
                else
                {
                    if (this.rbnChequePre.Checked)
                        message.AppendLine("Forma de Pagamento : Cheque 3x");
                    if (this.rbnChequeVista.Checked)
                        message.AppendLine("Forma de Pagamento : Cheque à vista");
                    if (this.rbnDinheiro.Checked)
                        message.AppendLine("Forma de Pagamento : Dinheiro");
                }

                message.AppendLine("Mais um aluno fez a matrícula. Favor entrar em contato.");

                return message.ToString().Replace(Environment.NewLine, "<br />");
            }
            catch (Exception)
            {
                throw;
            }
        }

        private string BuildMessageAluno(String email)
        {
            try
            {
                StringBuilder message = new StringBuilder();
                message.Append("Nome : ");
                message.AppendLine(this.txtNome.Text);

                message.Append("Telefone : ");
                message.AppendLine(this.txtTelefone.Text);

                message.Append("Celular: ");
                message.AppendLine(this.txtCelular.Text);

                if (this.rbnTransDep.Checked)
                {
                    message.AppendLine("Forma de Pagamento : Transferencia ou depósito <br /> Banco: Itaú <br /> Ag:4298 <br /> Cc:10122-3");
                }
                else
                {
                    if (this.rbnChequePre.Checked)
                        message.AppendLine("Forma de Pagamento : Cheque 3x");
                    if (this.rbnChequeVista.Checked)
                        message.AppendLine("Forma de Pagamento : Cheque à vista");
                    if (this.rbnDinheiro.Checked)
                        message.AppendLine("Forma de Pagamento : Dinheiro");
                }
                message.AppendLine("Matricula no curso C#.net realizada com sucesso. \nAguarde que entraremos em contato. ");

                return message.ToString().Replace(Environment.NewLine, "<br />");
            }
            catch (Exception)
            {
                throw;
            }
        }

        public bool CheckCaptcha()
        {
            string strCaptcha = txtCaptcha.Text;
            if (Session["CaptchaImageText"].ToString() == strCaptcha)
                return true;
            else
                return false;
        }

        protected void insereAluno()
        {
            DEAluno aluno = null;
            string nascimento = this.txtNascimento.Text;
            int dia = int.Parse(nascimento.Substring(0, 2));
            int mes = int.Parse(nascimento.Substring(3, 2));
            int ano = int.Parse(nascimento.Substring(6, 4));

            using (DCCursoDataContext banco = new DCCursoDataContext())
            {
                var q = from e in banco.DEAlunos
                        where e.Email.Equals(this.txtEmail.Text)
                        select e;

                aluno = q.FirstOrDefault();
                if (aluno == null)
                {
                    aluno = new DEAluno();
                    aluno.Nome = this.txtNome.Text;
                    aluno.Endereco = this.txtEndereco.Text;
                    aluno.Telefone = this.txtTelefone.Text;
                    aluno.Celular = this.txtCelular.Text;
                    aluno.RG = this.txtRG.Text;
                    aluno.CPF = this.txtCPF.Text;
                    aluno.Nascimento = new DateTime(ano, mes, dia);
                    aluno.Email = this.txtEmail.Text;
                    aluno.Senha = Cript.getMD5Hash(this.txtSenha.Text);
                    aluno.STPago = false;

                    if (this.FUInserir.HasFile)
                    {
                        string fileName = aluno.CPF + FUInserir.FileName;
                        string SaveLocation = Server.MapPath("Curriculos") + "\\" + fileName;
                        FUInserir.PostedFile.SaveAs(SaveLocation);

                        aluno.Curriculo = fileName;
                    }

                    if (this.FUInserirFoto.HasFile)
                    {
                        string fileName = aluno.CPF + FUInserirFoto.FileName;
                        string SaveLocation = Server.MapPath("FotoAluno") + "\\" + fileName;
                        FUInserirFoto.PostedFile.SaveAs(SaveLocation);

                        aluno.Foto = fileName;
                    }
                    banco.DEAlunos.InsertOnSubmit(aluno);

                    banco.SubmitChanges();
                }
            }

            insereCursoAluno(aluno);
        }

        protected void insereCursoAluno(DEAluno aluno)
        {
            using (DCCursoDataContext banco = new DCCursoDataContext())
            {
                var q = from e in banco.DECursoAlunos
                        where e.CodigoAluno.Equals(aluno.Codigo) &&
                              e.CodigoCurso.Equals(Int32.Parse(this.ddlCurso.SelectedValue))
                        select e;

                DECursoAluno cursoAluno = q.FirstOrDefault();

                if (cursoAluno != null)
                {
                    Util.showMessage(this,"Você já está matriculado neste curso.");
                    throw new Exception();
                }

                cursoAluno = new DECursoAluno();
                cursoAluno.CodigoAluno = aluno.Codigo;
                cursoAluno.CodigoCurso = Int32.Parse(this.ddlCurso.SelectedValue);
                cursoAluno.Status = (short)StatusAluno.Matriculado;

                banco.DECursoAlunos.InsertOnSubmit(cursoAluno);

                banco.SubmitChanges();
            }
        }

        protected bool carregaCursos()
        {
            try
            {
                List<DECurso> cursos = null;
                using (DCCursoDataContext banco = new DCCursoDataContext())
                {
                    var q = from e in banco.DECursos
                            where
                                e.Status == (short)StatusCurso.MatriculaAberta ||
                                e.Status == (short)StatusCurso.EmAndamento
                            select e;

                    cursos = q.ToList();

                    foreach (DECurso c in cursos)
                    {
                        c.DETipoCurso = (from tipo in banco.DETipoCursos
                                         where tipo.Codigo == c.CodigoTipoCurso
                                         select tipo).FirstOrDefault();
                    }

                    this.ddlCurso.DataSource = cursos;
                    this.ddlCurso.DataBind();
                }
                if (cursos.Count == 0)
                    return false;
                
                verificaCursoPreSelecionado();
                return true;
            }
            catch (Exception)
            {
                Util.showMessage(this,"Houve um erro enquanto carregava os cursos. Favor entrar em contato no Fale Conosco.");
                return false; 
            }
        }

        protected void verificaCursoPreSelecionado()
        {
            try
            {
                if (this.ClientQueryString.Count() > 0)
                    this.ddlCurso.SelectedValue = Request.QueryString["Curso"];
            }
            catch (Exception)
            {
            }
        }
    }
}